import { BOOKING_DI_TOKENS } from "@calcom/features/bookings/di/tokens";
import { BOOKING_AUDIT_DI_TOKENS } from "@calcom/features/booking-audit/di/tokens";
import { HASHED_LINK_DI_TOKENS } from "@calcom/features/hashedLink/di/tokens";
import { ORGANIZATION_DI_TOKENS } from "@calcom/features/ee/organizations/di/tokens";
import { WATCHLIST_DI_TOKENS } from "./watchlist/Watchlist.tokens";

export const DI_TOKENS = {
  PRISMA_CLIENT: Symbol("PrismaClient"),
  READ_ONLY_PRISMA_CLIENT: Symbol("ReadOnlyPrismaClient"),
  PRISMA_MODULE: Symbol("PrismaModule"),
  REDIS_CLIENT: Symbol("RedisClient"),
  OOO_REPOSITORY: Symbol("OOORepository"),
  OOO_REPOSITORY_MODULE: Symbol("OOORepositoryModule"),
  SCHEDULE_REPOSITORY: Symbol("ScheduleRepository"),
  SCHEDULE_REPOSITORY_MODULE: Symbol("ScheduleRepositoryModule"),
  SELECTED_SLOT_REPOSITORY: Symbol("SelectedSlotRepository"),
  SELECTED_SLOT_REPOSITORY_MODULE: Symbol("SelectedSlotRepositoryModule"),
  TEAM_REPOSITORY: Symbol("TeamRepository"),
  TEAM_REPOSITORY_MODULE: Symbol("TeamRepositoryModule"),
  USER_REPOSITORY: Symbol("UserRepository"),
  USER_REPOSITORY_MODULE: Symbol("UserRepositoryModule"),
  BOOKING_REPOSITORY: Symbol("BookingRepository"),
  BOOKING_REPOSITORY_MODULE: Symbol("BookingRepositoryModule"),
  BOOKING_ACCESS_SERVICE: Symbol("BookingAccessService"),
  BOOKING_ACCESS_SERVICE_MODULE: Symbol("BookingAccessServiceModule"),
  EVENT_TYPE_REPOSITORY: Symbol("EventTypeRepository"),
  EVENT_TYPE_REPOSITORY_MODULE: Symbol("EventTypeRepositoryModule"),
  ROUTING_FORM_RESPONSE_REPOSITORY: Symbol("RoutingFormResponseRepository"),
  ROUTING_FORM_RESPONSE_REPOSITORY_MODULE: Symbol("RoutingFormResponseRepositoryModule"),
  AVAILABLE_SLOTS_SERVICE: Symbol("AvailableSlotsService"),
  AVAILABLE_SLOTS_SERVICE_MODULE: Symbol("AvailableSlotsModule"),
  INSIGHTS_ROUTING_SERVICE: Symbol("InsightsRoutingService"),
  INSIGHTS_ROUTING_SERVICE_MODULE: Symbol("InsightsRoutingServiceModule"),
  INSIGHTS_BOOKING_SERVICE: Symbol("InsightsBookingService"),
  INSIGHTS_BOOKING_SERVICE_MODULE: Symbol("InsightsBookingServiceModule"),
  FEATURES_REPOSITORY: Symbol("FeaturesRepository"),
  FEATURES_REPOSITORY_MODULE: Symbol("FeaturesRepositoryModule"),
  CHECK_BOOKING_LIMITS_SERVICE: Symbol("CheckBookingLimitsService"),
  CHECK_BOOKING_LIMITS_SERVICE_MODULE: Symbol("CheckBookingLimitsServiceModule"),
  CHECK_BOOKING_AND_DURATION_LIMITS_SERVICE: Symbol("CheckBookingAndDurationLimitsService"),
  CHECK_BOOKING_AND_DURATION_LIMITS_SERVICE_MODULE: Symbol("CheckBookingAndDurationLimitsServiceModule"),
  GET_USER_AVAILABILITY_SERVICE: Symbol("GetUserAvailabilityService"),
  GET_USER_AVAILABILITY_SERVICE_MODULE: Symbol("GetUserAvailabilityModule"),
  BUSY_TIMES_SERVICE: Symbol("BusyTimesService"),
  BUSY_TIMES_SERVICE_MODULE: Symbol("BusyTimesServiceModule"),
  QUALIFIED_HOSTS_SERVICE: Symbol("QualifiedHostsService"),
  QUALIFIED_HOSTS_SERVICE_MODULE: Symbol("QualifiedHostsServiceModule"),
  FILTER_HOSTS_SERVICE: Symbol("FilterHostsService"),
  FILTER_HOSTS_SERVICE_MODULE: Symbol("FilterHostsServiceModule"),
  NO_SLOTS_NOTIFICATION_SERVICE: Symbol("NoSlotsNotificationService"),
  NO_SLOTS_NOTIFICATION_SERVICE_MODULE: Symbol("NoSlotsNotificationServiceModule"),
  MEMBERSHIP_REPOSITORY: Symbol("MembershipRepository"),
  MEMBERSHIP_REPOSITORY_MODULE: Symbol("MembershipRepositoryModule"),
  LUCKY_USER_SERVICE: Symbol("LuckyUserService"),
  LUCKY_USER_SERVICE_MODULE: Symbol("LuckyUserServiceModule"),
  HOST_REPOSITORY: Symbol("HostRepository"),
  HOST_REPOSITORY_MODULE: Symbol("HostRepositoryModule"),
  ATTRIBUTE_REPOSITORY: Symbol("AttributeRepository"),
  ATTRIBUTE_REPOSITORY_MODULE: Symbol("AttributeRepositoryModule"),
  MEMBERSHIP_SERVICE: Symbol("MembershipService"),
  MEMBERSHIP_SERVICE_MODULE: Symbol("MembershipServiceModule"),
  ASSIGNMENT_REASON_REPOSITORY: Symbol("AssignmentReasonRepository"),
  ASSIGNMENT_REASON_REPOSITORY_MODULE: Symbol("AssignmentReasonRepositoryModule"),
  CREDENTIAL_REPOSITORY: Symbol("CredentialRepository"),
  CREDENTIAL_REPOSITORY_MODULE: Symbol("CredentialRepositoryModule"),
  MANAGED_EVENT_REASSIGNMENT_SERVICE: Symbol("ManagedEventReassignmentService"),
  MANAGED_EVENT_REASSIGNMENT_SERVICE_MODULE: Symbol("ManagedEventReassignmentServiceModule"),
  // Booking service tokens
  ...BOOKING_AUDIT_DI_TOKENS,
  ...BOOKING_DI_TOKENS,
  ...HASHED_LINK_DI_TOKENS,
  ...WATCHLIST_DI_TOKENS,
  ...ORGANIZATION_DI_TOKENS,
};
